//package com.moon.back.config;
//
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Lazy;
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisPool;
//import redis.clients.jedis.JedisPoolConfig;
//
//import javax.annotation.PostConstruct;
//import java.nio.charset.StandardCharsets;
//import java.util.ArrayList;
//import java.util.List;
//@Lazy
//@Configuration
//public class FileSearchConfig {
//
//    @Value("${spring.data.redis.host}")
//    private String redisHost;
//
//    @Value("${spring.data.redis.port}")
//    private int redisPort;
//
//    @Value("${spring.data.redis.password}")
//    private String redisPassword;
//
//    private static final String FILE_INDEX = "fileIdx";
//
//    @Bean
//    public JedisPool jedisPool() {
//        JedisPoolConfig poolConfig = new JedisPoolConfig();
//        poolConfig.setMaxTotal(128);
//        poolConfig.setMaxIdle(128);
//        poolConfig.setMinIdle(16);
//        poolConfig.setTestOnBorrow(true);
//        poolConfig.setTestOnReturn(true);
//        poolConfig.setTestWhileIdle(true);
//        poolConfig.setMinEvictableIdleTimeMillis(60000);
//        poolConfig.setTimeBetweenEvictionRunsMillis(30000);
//        poolConfig.setNumTestsPerEvictionRun(3);
//        poolConfig.setBlockWhenExhausted(true);
//        return new JedisPool(poolConfig, redisHost, redisPort, 2000, redisPassword);
//    }
//
//    @PostConstruct
//    public void initFileIndex() {
//        try (Jedis jedis = jedisPool().getResource()) {
//            // 尝试删除已存在的索引
//            try {
//                jedis.sendCommand(()-> "FT.DROPINDEX".getBytes(StandardCharsets.UTF_8));
//            } catch (Exception e) {
//                // 忽略索引不存在的错误
//            }
//
//            // 创建索引字段
//            List<Field> fields = new ArrayList<>();
//            fields.add(Field.text("fileName").sortable(true).build());
//            fields.add(Field.text("filePath").sortable(true).build());
//            fields.add(Field.tag("fileType").sortable(true).build());
//            fields.add(Field.numeric("fileSize").sortable(true).build());
//            fields.add(Field.numeric("uploadTime").sortable(true).build());
//            fields.add(Field.tag("uploadUser").sortable(true).build());
//
//            // 构建创建索引的命令
//            List<String> createIndexArgs = new ArrayList<>();
//            createIndexArgs.add("FT.CREATE");
//            createIndexArgs.add(FILE_INDEX);
//            createIndexArgs.add("ON");
//            createIndexArgs.add("HASH");
//            createIndexArgs.add("PREFIX");
//            createIndexArgs.add("1");
//            createIndexArgs.add("file:");
//            createIndexArgs.add("SCHEMA");
//
//            // 添加字段定义
//            for (Field field : fields) {
//                String[] fieldArgs = field.toRedisCommand().split(" ");
//                for (String arg : fieldArgs) {
//                    createIndexArgs.add(arg);
//                }
//            }
//
//            // 执行创建索引命令
//            try {
//                jedis.sendCommand(()-> "FT.DROPINDEX".getBytes(StandardCharsets.UTF_8));
//            } catch (Exception e) {
//                throw new RuntimeException("Failed to create search index: " + e.getMessage(), e);
//            }
//        }
//    }
//}